package com.lazily.innerclass;


/**
 * @Author: GZQ
 * @date: 2025/2/15 22:59
 * @description: 匿名内部类的练习
 */

public class InnerClassExercise02 {

	// 程序入口
	public static void main(String[] args) {
		/*
		1.有一个铃声接口 Bell，里面有个 ring 方法。
		2.有一个手机类 Cellphone，具有闹钟功能 alarmClock，参数是 Bell 类型
		3.测试手机类的闹钟功能，通过匿名内部类(对象)作为参数，打印：懒猪起床了
		4.再传入另一个匿名内部类(对象)，打印：小伙伴上课了
		* */
		Cellphone cellphone = new Cellphone();
		// 分析
		/*
		1. 传递的是实现了 Bell接口的匿名内部类 InnerClassExercise02$1
		2. 重写了 ring
		3. Bell bell =  new Bell() {
			@Override
			public void ring() {
				System.out.println("懒猪起床了");
			}
		}
		* */
		cellphone.alarmclock(new Bell() {
			@Override
			public void ring() {
				System.out.println("懒猪起床了");
			}
		});

		cellphone.alarmclock(new Bell() {
			@Override
			public void ring() {
				System.out.println("小伙伴们上课了...");
			}
		});
	}
}

interface Bell { // 接口
	void ring(); // 方法
}

class Cellphone { // 类
	public void alarmclock(Bell bell) { // 形参是Bell接口类型
		System.out.println(bell.getClass());
		bell.ring(); // 动态绑定
	}
}